#ifndef __STM32F4x7_ETH_BSP_H
#define __STM32F4x7_ETH_BSP_H



/* 根据使用的开发板类型，包含对应的板级支持包头文件 */
#if defined (USE_STM324xG_EVAL)
  #include "stm324xg_eval.h"   // 使用 STM324xG-EVAL 开发板
#elif defined (USE_STM324x7I_EVAL) 
  #include "stm324x7i_eval.h"  // 使用 STM324x7I-EVAL 开发板
#else
 #error "Please select first the Evaluation board used in your application (in Project Options)"
 // 如果没有定义任何开发板宏，编译报错提示用户选择开发板
#endif

#include "netif.h"  // 引入 LwIP 的网络接口结构体定义


/* PHY 芯片地址定义 */
#define DP83848_PHY_ADDRESS       0x01 
// DP83848 PHY 芯片的 I2C/SMI 地址（STM324xG-EVAL 开发板默认地址）


/* 以太网链路状态外部中断（EXTI）相关宏定义 */
#define ETH_LINK_EXTI_LINE             EXTI_Line14
// 外部中断线路号（对应 PHY INT 引脚的 EXTI 中断线）

#define ETH_LINK_EXTI_PORT_SOURCE      EXTI_PortSourceGPIOB
// EXTI 端口源（PHY INT 引脚所在 GPIO 端口）

#define ETH_LINK_EXTI_PIN_SOURCE       EXTI_PinSource14
// EXTI 引脚源（PHY INT 引脚编号）

#define ETH_LINK_EXTI_IRQn             EXTI15_10_IRQn 
// 对应的 NVIC 中断通道（EXTI10~EXTI15 共用一个中断号）

/* PHY INT 引脚硬件定义（连接 PHY 的中断输出引脚） */
#define ETH_LINK_PIN                   GPIO_Pin_14
#define ETH_LINK_GPIO_PORT             GPIOB
#define ETH_LINK_GPIO_CLK              RCC_AHB1Periph_GPIOB
// PHY 中断引脚为 PB14，定义了引脚号、端口及端口时钟


/* 以太网状态标志位定义 */
#define ETH_INIT_FLAG           0x01  // 以太网初始化完成标志
#define ETH_LINK_FLAG           0x10  // 以太网链路已连接标志


/* 函数声明 */
void  ETH_BSP_Config(void);
// 以太网底层硬件初始化函数（GPIO、NVIC、MAC/DMA、PHY 配置）

uint32_t Eth_Link_PHYITConfig(uint16_t PHYAddress);
// 配置 PHY 芯片产生链路状态变化中断

void Eth_Link_EXTIConfig(void);
// 配置 EXTI 用于接收 PHY 链路中断信号

void Eth_Link_IT_task(void * pvParameters);
// FreeRTOS 任务：等待链路中断信号量并处理链路状态变化

void ETH_link_callback(struct netif *netif);
// LwIP 链路状态变化回调函数


#endif /* __STM32F4x7_ETH_BSP_H */


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
